<?php
namespace app\apijson\query\operators;

class LimitOperator
{
    public static function apply($query, $value)
    {
        // 支持两种格式：
        // 1. 单个数字: @limit: 10 (限制10条)
        // 2. 逗号分隔: @limit: "5,10" (跳过5条，取10条，类似 OFFSET 5 LIMIT 10)
        
        if (is_numeric($value)) {
            // 单个数字，直接限制条数
            $limit = (int)$value;
            if ($limit < 0) {
                throw new \app\apijson\core\ApiJsonException('limit 值不能为负数');
            }
            if ($limit > 1000) {
                throw new \app\apijson\core\ApiJsonException('limit 值不能超过 1000');
            }
            $query->limit($limit);
        } elseif (is_string($value) && strpos($value, ',') !== false) {
            // 逗号分隔格式: "offset,limit"
            $parts = explode(',', $value);
            if (count($parts) !== 2) {
                throw new \app\apijson\core\ApiJsonException('limit 格式错误，应为 "offset,limit"');
            }
            
            $offset = (int)trim($parts[0]);
            $limit = (int)trim($parts[1]);
            
            if ($offset < 0) {
                throw new \app\apijson\core\ApiJsonException('offset 值不能为负数');
            }
            if ($limit < 0) {
                throw new \app\apijson\core\ApiJsonException('limit 值不能为负数');
            }
            if ($limit > 1000) {
                throw new \app\apijson\core\ApiJsonException('limit 值不能超过 1000');
            }
            
            $query->offset($offset)->limit($limit);
        } else {
            throw new \app\apijson\core\ApiJsonException('limit 格式错误，应为数字或 "offset,limit" 格式');
        }
    }
}

